package mws;


import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@EnableConfigurationProperties(ExecutorProperties.class)
@Configuration(proxyBeanMethods = false)
@AutoConfiguration
public class NacosConfigServiceInject {
    private static final Logger log = LoggerFactory.getLogger(NacosConfigServiceInject.class);

//    //public abstract class IdempotentConfigurationSupport {
 //
 //     这个 直接导入  就是加入@Bean 这种  就可以光速导入 不用 什么 import  感觉还可以
    // 但是 我这个自动装配 感觉也行啊
//@Component
//@RequiredArgsConstructor(onConstructor_={@Autowired})
//public class RedisUtils {
 //   这样可以以
//
//
// }
    @Bean("threadExecutorConfigRefresh")
    public ConfigService ConfigServiceInject(NacosConfigManager nacosConfigManager, ExecutorProperties properties){
// 这个 创建的config 似乎有问题 似乎是共用某个 东西的
        ConfigService configService;
        try {
            configService = nacosConfigManager.getConfigService();
            // 加入监听 的 一个 配置名字 还有 properties 名字 这种
            configService.addListener(properties.getConfigName(),properties.getGroup(), new ThreadPoolConfigListener() {
                @Override
                public void publisher(String configs) {
                    try {
                        boolean b = configService.publishConfig(properties.getConfigName(),properties.getGroup(),configs);
                    } catch (NacosException e) {
                        throw new RuntimeException("com.alibaba.nacos.api.config.ConfigService.addListener  失败");
                    }
                }
            });
        } catch (NacosException e) {
            throw new RuntimeException(e);
        }
        return configService;
    }



}

